This is a notebook delving into the “bucket”-style, alternative analyses for Studies 1-3. In this analysis, we define three categories, or “buckets,” of mental capacities—BODY capacites, HEART capacities, and MIND capacities. To do this, we take the six items with the strongest positive factor loadings on each of these factors, according to an EFA of adults’ responses. We chose six items per “bucket” in order to have an even number of items in each category.
Study 1
Define buckets
Scatter
Let’s look at the proportion of participants in each age group whose endorsements “match” across buckets - I’ll count endorsement scores <3 as low, >=3 as high, and “matches” as two “low” scores or two “high” scores. We’d predict that, for distinctions that increase over development, there would be fewer adults that “match” than children.



Examine first-order age trends


Examine difference scores


non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!

Examine absolute difference scores


non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!

Study 2
Define buckets
Scatter
Let’s look at the proportion of participants in each age group whose endorsements “match” across buckets - I’ll count endorsement scores <3 as low, >=3 as high, and “matches” as two “low” scores or two “high” scores. We’d predict that, for distinctions that increase over development, there would be fewer adults that “match” than children.



Examine first-order age trends


Examine difference scores



Examine absolute difference scores



Study 3
Define buckets
Examine first-order age trends


Examine difference scores


non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!

Examine absolute difference scores
non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!non-integer #successes in a binomial glm!

LS0tCnRpdGxlOiAiU3R1ZGllcyAxLTM6IEJ1Y2tldCBhbmFseXNlcyIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpUaGlzIGlzIGEgbm90ZWJvb2sgZGVsdmluZyBpbnRvIHRoZSAiYnVja2V0Ii1zdHlsZSwgYWx0ZXJuYXRpdmUgYW5hbHlzZXMgZm9yIFN0dWRpZXMgMS0zLiBJbiB0aGlzIGFuYWx5c2lzLCB3ZSBkZWZpbmUgdGhyZWUgY2F0ZWdvcmllcywgb3IgImJ1Y2tldHMsIiBvZiBtZW50YWwgY2FwYWNpdGllc+KAlF9CT0RZXyBjYXBhY2l0ZXMsIF9IRUFSVF8gY2FwYWNpdGllcywgYW5kIF9NSU5EXyBjYXBhY2l0aWVzLiBUbyBkbyB0aGlzLCB3ZSB0YWtlIHRoZSBzaXggaXRlbXMgd2l0aCB0aGUgc3Ryb25nZXN0IHBvc2l0aXZlIGZhY3RvciBsb2FkaW5ncyBvbiBlYWNoIG9mIHRoZXNlIGZhY3RvcnMsIGFjY29yZGluZyB0byBhbiBFRkEgb2YgYWR1bHRzJyByZXNwb25zZXMuIFdlIGNob3NlIHNpeCBpdGVtcyBwZXIgImJ1Y2tldCIgaW4gb3JkZXIgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBvZiBpdGVtcyBpbiBlYWNoIGNhdGVnb3J5LgoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNjcsIAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpiaW5vbWlhbF9zbW9vdGggPC0gZnVuY3Rpb24oLi4uKSB7CiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSwgLi4uKQp9CmBgYAoKYGBge3J9CiMgUlVOIERJTUtJRF9NQU5VU0NSSVBULlJNRCBGSVJTVCEKYGBgCgojIFN0dWR5IDEKCiMjIERlZmluZSBidWNrZXRzCgpgYGB7cn0KZDFfYnVja2V0cyA8LSBsb2FkaW5nc19mdW4oZWZhXzNfZDFfYWQpICU+JQogIG11dGF0ZShmYWN0b3IgPSByZWNvZGVfZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjIiID0gIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMSIgPSAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMyIgPSAiTUlORCIpKSAlPiUKICBncm91cF9ieShmYWN0b3IpICU+JQogIHRvcF9uKDYsIGxvYWRpbmcpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpkMV9hbGxfZW5kb3JzZSA8LSBkMV9idWNrZXRzICU+JQogIHNlbGVjdCgtbG9hZGluZykgJT4lCiAgbGVmdF9qb2luKGQxX2FsbCkgJT4lCiAgbXV0YXRlKGVuZG9yc2UgPSBpZmVsc2UocmVzcG9uc2VfbnVtID4gMCwgMSwgMCkpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UobiA9IGxlbmd0aChlbmRvcnNlKSwKICAgICAgICAgICAgc3VtX2VuZG9yc2UgPSBzdW0oZW5kb3JzZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgcHJvcF9lbmRvcnNlID0gbWVhbihlbmRvcnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgojIyBTY2F0dGVyCgpMZXQncyBsb29rIGF0IHRoZSBwcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyBpbiBlYWNoIGFnZSBncm91cCB3aG9zZSBlbmRvcnNlbWVudHMgIm1hdGNoIiBhY3Jvc3MgYnVja2V0cyAtIEknbGwgY291bnQgZW5kb3JzZW1lbnQgc2NvcmVzIDwzIGFzIGxvdywgPj0zIGFzIGhpZ2gsIGFuZCAibWF0Y2hlcyIgYXMgdHdvICJsb3ciIHNjb3JlcyBvciB0d28gImhpZ2giIHNjb3Jlcy4gV2UnZCBwcmVkaWN0IHRoYXQsIGZvciBkaXN0aW5jdGlvbnMgdGhhdCBpbmNyZWFzZSBvdmVyIGRldmVsb3BtZW50LCB0aGVyZSB3b3VsZCBiZSBfZmV3ZXJfIGFkdWx0cyB0aGF0ICJtYXRjaCIgdGhhbiBjaGlsZHJlbi4KCmBgYHtyLCBpbmNsdWRlID0gVH0KZDFfYWxsX21hdGNoX3RhYiA8LSBkMV9hbGxfZW5kb3JzZSAlPiUKICBzZWxlY3QoYWdlX2dyb3VwLCBzdWJpZCwgY2hhcmFjdGVyLCBmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBzcHJlYWQoZmFjdG9yLCBzdW1fZW5kb3JzZSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoQk9EWSwgSEVBUlQsIE1JTkQpLAogICAgICAgICAgICBmdW5zKGlmZWxzZSguIDwgMywgImxlc3MgdGhhbiAzIiwgIjMgb3IgbW9yZSIpKSkgJT4lCiAgbXV0YXRlKEJPRFlfSEVBUlRfbWF0Y2ggPSAoQk9EWSA9PSBIRUFSVCksCiAgICAgICAgIEJPRFlfTUlORF9tYXRjaCA9IChCT0RZID09IE1JTkQpLAogICAgICAgICBIRUFSVF9NSU5EX21hdGNoID0gKEhFQVJUID09IE1JTkQpKSAlPiUKICBzZWxlY3QoLWMoQk9EWSwgSEVBUlQsIE1JTkQpKSAlPiUKICBnYXRoZXIocGFpciwgbWF0Y2gsIGVuZHNfd2l0aCgiX21hdGNoIikpICU+JQogIGNvdW50KGFnZV9ncm91cCwgcGFpciwgbWF0Y2gpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgcGFpcikgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGZpbHRlcihtYXRjaCA9PSBUUlVFKSAlPiUKICBzZWxlY3QoYWdlX2dyb3VwLCBwYWlyLCBwcm9wKSAlPiUKICBhcnJhbmdlKHBhaXIsIGFnZV9ncm91cCkgJT4lCiAgbXV0YXRlKHBhaXIgPSBnc3ViKCJfbWF0Y2giLCAiIiwgcGFpcikpCmQxX2FsbF9tYXRjaF90YWIKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmQxX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIHNwcmVhZChmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBCT0RZLCB5ID0gSEVBUlQsIGNvbG9yID0gYWdlX2dyb3VwKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDMsIGx0eSA9IDIpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAzLCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHdpZHRoID0gMC4yLCBoZWlnaHQgPSAwLjIpICMrCiAgIyBnZW9tX3Ntb290aChhZXMoZ3JvdXAgPSBhZ2VfZ3JvdXApLCBtZXRob2QgPSAibG0iKQoKZDFfYWxsX2VuZG9yc2UgJT4lCiAgc2VsZWN0KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlciwgZmFjdG9yLCBzdW1fZW5kb3JzZSkgJT4lCiAgc3ByZWFkKGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIGdncGxvdChhZXMoeCA9IEJPRFksIHkgPSBNSU5ELCBjb2xvciA9IGFnZV9ncm91cCkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAzLCBsdHkgPSAyKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMywgbHR5ID0gMikgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCB3aWR0aCA9IDAuMiwgaGVpZ2h0ID0gMC4yKSAjKwogICMgZ2VvbV9zbW9vdGgoYWVzKGdyb3VwID0gYWdlX2dyb3VwKSwgbWV0aG9kID0gImxtIikKCmQxX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIHNwcmVhZChmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBIRUFSVCwgeSA9IE1JTkQsIGNvbG9yID0gYWdlX2dyb3VwKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDMsIGx0eSA9IDIpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAzLCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHdpZHRoID0gMC4yLCBoZWlnaHQgPSAwLjIpICMrCiAgIyBnZW9tX3Ntb290aChhZXMoZ3JvdXAgPSBhZ2VfZ3JvdXApLCBtZXRob2QgPSAibG0iKQpgYGAKCmBgYHtyfQp0ZW1wIDwtIGQxX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIHNwcmVhZChmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBtdXRhdGVfYXQodmFycyhCT0RZLCBIRUFSVCwgTUlORCksCiAgICAgICAgICAgIGZ1bnMoaWZlbHNlKC4gPCAzLCAibGVzcyB0aGFuIDMiLCAiMyBvciBtb3JlIikpKSAlPiUKICBtdXRhdGUoQk9EWV9IRUFSVF9tYXRjaCA9IChCT0RZID09IEhFQVJUKSwKICAgICAgICAgQk9EWV9NSU5EX21hdGNoID0gKEJPRFkgPT0gTUlORCksCiAgICAgICAgIEhFQVJUX01JTkRfbWF0Y2ggPSAoSEVBUlQgPT0gTUlORCkpICU+JQogIHNlbGVjdCgtYyhCT0RZLCBIRUFSVCwgTUlORCkpICU+JQogIGdhdGhlcihwYWlyLCBtYXRjaCwgZW5kc193aXRoKCJfbWF0Y2giKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpLAogICAgICAgICBwYWlyID0gZmFjdG9yKHBhaXIpKQoKY29udHJhc3RzKHRlbXAkYWdlX2dyb3VwKSA8LSBjYmluZCgiNzlfYWQiID0gYygxLCAwKSkKY29udHJhc3RzKHRlbXAkY2hhcmFjdGVyKSA8LSBjYmluZCgiUl9HTSIgPSBjKC0xLCAxKSkKY29udHJhc3RzKHRlbXAkcGFpcikgPC0gY2JpbmQoIkJIX0dNIiA9IGMoMSwgLTEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSE1fR00iID0gYygwLCAtMSwgMSkpCgpyX3RlbXAgPC0gZ2xtKG1hdGNoIH4gYWdlX2dyb3VwICogY2hhcmFjdGVyICogcGFpciwgCiAgICAgICAgICAgICAgZGF0YSA9IHRlbXAsCiAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIikKCnN1bW1hcnkocl90ZW1wKQpgYGAKCgojIyBFeGFtaW5lIGZpcnN0LW9yZGVyIGFnZSB0cmVuZHMKCmBgYHtyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGQxX2FsbF9lbmRvcnNlLCAKICAgICAgIGFlcyh4ID0gcHJvcF9lbmRvcnNlLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKGNoYXJhY3RlciB+IGZhY3RvcikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzYsIGFscGhhID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMiwgMS4yKSwgYnJlYWtzID0gc2VxKDAsIDEsIDAuNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkKYGBgCgpgYGB7cn0KZDFfYWxsX2VuZG9yc2VfYm9vdCA8LSBkMV9hbGxfZW5kb3JzZSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJwcm9wX2VuZG9yc2UiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZmlnU1VQUDFfcGxvdCA8LSBkMV9hbGxfZW5kb3JzZSAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwICE9ICJhZHVsdHMiKSAlPiUKICBsZWZ0X2pvaW4oZDFfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IHByb3BfZW5kb3JzZSwgCiAgICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLCBjb2xvciA9IGNoYXJhY3Rlciwgc2hhcGUgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21faml0dGVyKGFscGhhID0gMC40LCB3aWR0aCA9IDAsIGhlaWdodCA9IDAuMDMpICsKICBiaW5vbWlhbF9zbW9vdGgoYWVzKHdlaWdodCA9IG4pLCBzaG93LmxlZ2VuZCA9IEYpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLAogICMgICAgICAgICAgICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZDFfYWxsX2VuZG9yc2UgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSAxMSksIGFscGhhID0gMC40LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQxX2FsbF9lbmRvcnNlX2Jvb3QgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDExLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg3OjExKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDc6MTAsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS82KSwgbGFiZWxzID0gMDo2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwgMjIpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxLCBzaXplID0gMykpKSArCiAgbGFicyh5ID0gIm51bWJlciBvZiBpdGVtcyBlbmRvcnNlZCAob3V0IG9mIDYpIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjd9CmZpZ1NVUFAxX3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZ1NVUFAxX3Bsb3QsIHN0cl93cmFwKCJGaWd1cmUgU1VQUDE6IE51bWJlciBvZiBtZW50YWwgY2FwYWNpdHkgaXRlbXMgKG91dCBvZiA2KSBlbmRvcnNlZCBpbiBlYWNoIGRvbWFpbiAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EKSBieSA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMSwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIHR3byB0YXJnZXQgY2hhcmFjdGVyczogYSBiZWV0bGUgKHBpbmsgY2lyY2xlcykgb3IgYSByb2JvdCAoYmx1ZSBzcXVhcmVzKS4gV2UgZGVmaW5lZCBlYWNoIGRvbWFpbiBieSB0aGUgNiBpdGVtcyB0aGF0IGxvYWRlZCB0aGUgbW9zdCBwb3NpdGl2ZWx5IG9uIHRoZSBjb3JyZXNwb25kaW5nIGZhY3RvciBpbiBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMsIGFuZCB3ZSBjb25zaWRlcmVkIHJlc3BvbnNlcyBvZiBlaXRoZXIgJ3llcycgb3IgJ2tpbmRhJyAoYnV0IG5vdCAnbm8nKSB0byBiZSBlbmRvcnNlbWVudHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gbG9naXN0aWMgcmVncmVzc2lvbnMgY29uc2lkZXJpbmcgY2hpbGRyZW4ncyBzY29yZXMgYWxvbmUuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb24gYWR1bHRzJyBzY29yZXMuIiwgMTMwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZ1NVUFAxX3dpdGhfY2FwdGlvbikKYGBgCgojIyBFeGFtaW5lIGRpZmZlcmVuY2Ugc2NvcmVzCgpgYGB7cn0KZDFfYWxsX2VuZG9yc2VfZGlmZiA8LSBkMV9hbGxfZW5kb3JzZSAlPiUKICBzZWxlY3QoYWdlX2dyb3VwLCBzdWJpZCwgY2hhcmFjdGVyLCBmYWN0b3IsIHByb3BfZW5kb3JzZSkgJT4lCiAgc3ByZWFkKGZhY3RvciwgcHJvcF9lbmRvcnNlKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIpICU+JQogIG11dGF0ZShgQk9EWSBtaW51cyBIRUFSVGAgPSBCT0RZIC0gSEVBUlQsCiAgICAgICAgIGBCT0RZIG1pbnVzIE1JTkRgID0gQk9EWSAtIE1JTkQsCiAgICAgICAgIGBNSU5EIG1pbnVzIEhFQVJUYCA9IE1JTkQgLSBIRUFSVCkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBzZWxlY3QoLWMoQk9EWSwgSEVBUlQsIE1JTkQpKSAlPiUKICBnYXRoZXIoY29tcGFyaXNvbiwgZGlmZmVyZW5jZSwgY29udGFpbnMoIm1pbiIpKSAlPiUKICBtdXRhdGUoZGlmZl8wMSA9IChkaWZmZXJlbmNlICsgMSkvMiwKICAgICAgICAgZGlmZl8wMV9hYnMgPSBhYnMoZGlmZmVyZW5jZSksCiAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpLAogICAgICAgICBjb21wYXJpc29uID0gZmFjdG9yKGNvbXBhcmlzb24pKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGQxX2FsbF9lbmRvcnNlX2RpZmYsIAogICAgICAgYWVzKHggPSBkaWZmXzAxLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKGNoYXJhY3RlciB+IGNvbXBhcmlzb24pICsKICBnZW9tX2hpc3RvZ3JhbShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGJpbndpZHRoID0gMS8xMiwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtMC4yLCAxLjIpLCBicmVha3MgPSBjKDAsIDEsIDAuNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmdncGxvdChkMV9hbGxfZW5kb3JzZV9kaWZmLCAKICAgICAgIGFlcyh4ID0gZGlmZl8wMSwgY29sb3IgPSBhZ2VfZ3JvdXAsIGZpbGwgPSBhZ2VfZ3JvdXApKSArCiAgZmFjZXRfZ3JpZCguIH4gY29tcGFyaXNvbikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzEyLCBhbHBoYSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAuNSwgbHR5ID0gMikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKC0wLjIsIDEuMiksIGJyZWFrcyA9IGMoMCwgMSwgMC41KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGRpcmVjdGlvbiA9IC0xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGRpcmVjdGlvbiA9IC0xKQpgYGAKCmBgYHtyfQpkMV9hbGxfZW5kb3JzZV9kaWZmX2Jvb3QgPC0gZDFfYWxsX2VuZG9yc2VfZGlmZiAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgY29tcGFyaXNvbikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZl8wMSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpmaWdTVVBQMl9wbG90IDwtIGQxX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGQxXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoeSA9IChkaWZmZXJlbmNlICsgNikvMTIpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IGRpZmZfMDEsIAogICAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwgY29sb3IgPSBjaGFyYWN0ZXIsIHNoYXBlID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBjb21wYXJpc29uKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMC4wMTUpICsKICBiaW5vbWlhbF9zbW9vdGgoYWVzKHdlaWdodCA9IDEpLCBzaG93LmxlZ2VuZCA9IEYpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLAogICMgICAgICAgICAgICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZDFfYWxsX2VuZG9yc2VfZGlmZiAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICBhZXMoeCA9IDExKSwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2UoZG9kZ2Uud2lkdGggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQxX2FsbF9lbmRvcnNlX2RpZmZfYm9vdCAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgIGFlcyh4ID0gMTEsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDc6MTEpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNzoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAxLzEyKSwgbGFiZWxzID0gc2VxKC02LCA2LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSwgc2l6ZSA9IDMpKSkgKwogIGxhYnMoeSA9ICJkaWZmZXJlbmNlcyBpbiBudW1iZXIgb2YgaXRlbXMgZW5kb3JzZWQgKG91dCBvZiA2KSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC43fQpmaWdTVVBQMl93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWdTVVBQMl9wbG90LCBzdHJfd3JhcCgiRmlndXJlIFNVUFAyOiBEaWZmZXJlbmNlcyBpbiB0aGUgbnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyAob3V0IG9mIDYpIGVuZG9yc2VkIGFjcm9zcyB0aGUgdGhyZWUgZG9tYWlucyAoQk9EWSBtaW51cyBIRUFSVCwgQk9EWSBtaW51cyBNSU5ELCBhbmQgTUlORCBtaW51cyBIRUFSVCkgYnkgNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDEsIGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgNDAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiB0d28gdGFyZ2V0IGNoYXJhY3RlcnM6IGEgYmVldGxlIChwaW5rIGNpcmNsZXMpIG9yIGEgcm9ib3QgKGJsdWUgc3F1YXJlcykuIFdlIGRlZmluZWQgZWFjaCBkb21haW4gYnkgdGhlIDYgaXRlbXMgdGhhdCBsb2FkZWQgdGhlIG1vc3QgcG9zaXRpdmVseSBvbiB0aGUgY29ycmVzcG9uZGluZyBmYWN0b3IgaW4gYW4gZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzIG9mIGFkdWx0cycgcmVzcG9uc2VzLCBhbmQgd2UgY29uc2lkZXJlZCByZXNwb25zZXMgb2YgZWl0aGVyICd5ZXMnIG9yICdraW5kYScgKGJ1dCBub3QgJ25vJykgdG8gYmUgZW5kb3JzZW1lbnRzLiBMaW5lcyBjb3JyZXNwb25kIHRvIGxvZ2lzdGljIHJlZ3Jlc3Npb25zIGNvbnNpZGVyaW5nIGNoaWxkcmVuJ3Mgc2NvcmVzIGFsb25lLiBFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9uIGFkdWx0cycgc2NvcmVzLiIsIDEzMCksIHggPSAwLCBoanVzdCA9IDApCmdnZHJhdyhmaWdTVVBQMl93aXRoX2NhcHRpb24pCmBgYAoKIyMgRXhhbWluZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIHNjb3JlcwoKYGBge3J9CmQxX2FsbF9lbmRvcnNlX2RpZmZfYWJzX2Jvb3QgPC0gZDFfYWxsX2VuZG9yc2VfZGlmZiAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNoYXJhY3RlciwgY29tcGFyaXNvbikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZl8wMV9hYnMiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmdncGxvdChkMV9hbGxfZW5kb3JzZV9kaWZmLCAKICAgICAgIGFlcyh4ID0gZGlmZl8wMV9hYnMsIGNvbG9yID0gYWdlX2dyb3VwLCBmaWxsID0gYWdlX2dyb3VwKSkgKwogIGZhY2V0X2dyaWQoY2hhcmFjdGVyIH4gY29tcGFyaXNvbikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzYsIGFscGhhID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMiwgMS4yKSwgYnJlYWtzID0gYygwLCAxLCAwLjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZDFfYWxsX2VuZG9yc2VfZGlmZiwgCiAgICAgICBhZXMoeCA9IGRpZmZfMDFfYWJzLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKC4gfiBjb21wYXJpc29uKSArCiAgZ2VvbV9oaXN0b2dyYW0ocG9zaXRpb24gPSAiaWRlbnRpdHkiLCBiaW53aWR0aCA9IDEvNiwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtMC4yLCAxLjIpLCBicmVha3MgPSBjKDAsIDEsIDAuNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkKYGBgCgpgYGB7cn0KY29udHJhc3RzKGQxX2FsbF9lbmRvcnNlX2RpZmYkYWdlX2dyb3VwKSA8LSBjYmluZCgiNzlfYWQiID0gYygxLCAwKSkKY29udHJhc3RzKGQxX2FsbF9lbmRvcnNlX2RpZmYkY2hhcmFjdGVyKSA8LSBjYmluZCgicl9HTSIgPSBjKC0xLCAxKSkKY29udHJhc3RzKGQxX2FsbF9lbmRvcnNlX2RpZmYkY29tcGFyaXNvbikgPC0gY2JpbmQoIkJIX0dNIiA9IGMoMSwgLTEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUhfR00iID0gYygwLCAtMSwgMSkpCgojIHJzMV9idWNrZXRfZ3AgPC0gYnJtKGRpZmZfMDFfYWJzIH4gYWdlX2dyb3VwICogY2hhcmFjdGVyICogY29tcGFyaXNvbiArICgxfHN1YmlkKSwKIyAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDFfYWxsX2VuZG9yc2VfZGlmZiAlPiUKIyAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShkaWZmXzAxX2FicyA9IGNhc2Vfd2hlbigKIyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZl8wMV9hYnMgPT0gMCB+IGRpZmZfMDFfYWJzICsgMC4wMDAwMDAwMSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZl8wMV9hYnMgPT0gMSB+IGRpZmZfMDFfYWJzIC0gMC4wMDAwMDAwMSkpLAojICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJCZXRhIikKIyBzdW1tYXJ5KHJzMV9idWNrZXRfZ3ApCgojIGZpeGVmKHJzMV9idWNrZXRfZ3ApICU+JSByb3VuZCgyKSAlPiUKIyAgIGRhdGEuZnJhbWUoKSAlPiUKIyAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW0iKSAlPiUKIyAgIG11dGF0ZSgibm9uemVybyIgPSBpZmVsc2UoUTIuNSAqIFE5Ny41ID4gMCwgIioiLCAiIikpICU+JQojICAgc2VsZWN0KHBhcmFtLCBFc3RpbWF0ZSwgbm9uemVybykKYGBgCgoKYGBge3J9CmZpZ1NVUFAzX3Bsb3QgPC0gZDFfYWxsX2VuZG9yc2VfZGlmZiAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwICE9ICJhZHVsdHMiKSAlPiUKICBsZWZ0X2pvaW4oZDFfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogIG11dGF0ZSh5ID0gKGRpZmZlcmVuY2UgKyA2KS8xMikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gZGlmZl8wMV9hYnMsIAogICAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwgY29sb3IgPSBjaGFyYWN0ZXIsIHNoYXBlID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBjb21wYXJpc29uKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMC4wMTUpICsKICBiaW5vbWlhbF9zbW9vdGgoYWVzKHdlaWdodCA9IDEpLCBzaG93LmxlZ2VuZCA9IEYpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLAogICMgICAgICAgICAgICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZDFfYWxsX2VuZG9yc2VfZGlmZiAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICBhZXMoeCA9IDExKSwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2UoZG9kZ2Uud2lkdGggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQxX2FsbF9lbmRvcnNlX2RpZmZfYWJzX2Jvb3QgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDExLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg3OjExKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDc6MTAsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS82KSwgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwgMjIpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxLCBzaXplID0gMykpKSArCiAgbGFicyh5ID0gImFzYm9sdXRlIGRpZmZlcmVuY2VzIGluIG51bWJlciBvZiBpdGVtcyBlbmRvcnNlZCAob3V0IG9mIDYpIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjd9CmZpZ1NVUFAzX3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZ1NVUFAzX3Bsb3QsIHN0cl93cmFwKCJGaWd1cmUgU1VQUDI6IEFic29sdXRlIGRpZmZlcmVuY2VzIGluIHRoZSBudW1iZXIgb2YgbWVudGFsIGNhcGFjaXR5IGl0ZW1zIChvdXQgb2YgNikgZW5kb3JzZWQgYWNyb3NzIHRoZSB0aHJlZSBkb21haW5zIChCT0RZIG1pbnVzIEhFQVJULCBCT0RZIG1pbnVzIE1JTkQsIGFuZCBNSU5EIG1pbnVzIEhFQVJUKSBieSA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMSwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIHR3byB0YXJnZXQgY2hhcmFjdGVyczogYSBiZWV0bGUgKHBpbmsgY2lyY2xlcykgb3IgYSByb2JvdCAoYmx1ZSBzcXVhcmVzKS4gV2UgZGVmaW5lZCBlYWNoIGRvbWFpbiBieSB0aGUgNiBpdGVtcyB0aGF0IGxvYWRlZCB0aGUgbW9zdCBwb3NpdGl2ZWx5IG9uIHRoZSBjb3JyZXNwb25kaW5nIGZhY3RvciBpbiBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMsIGFuZCB3ZSBjb25zaWRlcmVkIHJlc3BvbnNlcyBvZiBlaXRoZXIgJ3llcycgb3IgJ2tpbmRhJyAoYnV0IG5vdCAnbm8nKSB0byBiZSBlbmRvcnNlbWVudHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gbG9naXN0aWMgcmVncmVzc2lvbnMgY29uc2lkZXJpbmcgY2hpbGRyZW4ncyBzY29yZXMgYWxvbmUuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb24gYWR1bHRzJyBzY29yZXMuIiwgMTMwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZ1NVUFAzX3dpdGhfY2FwdGlvbikKYGBgCgoKIyBTdHVkeSAyCgojIyBEZWZpbmUgYnVja2V0cwoKYGBge3J9CmQyX2J1Y2tldHMgPC0gbG9hZGluZ3NfZnVuKGVmYV8zX2QyX2FkKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gcmVjb2RlX2ZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkYxIiA9ICJCT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjIiID0gIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjMiID0gIk1JTkQiKSkgJT4lCiAgZ3JvdXBfYnkoZmFjdG9yKSAlPiUKICB0b3Bfbig2LCBsb2FkaW5nKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZDJfYWxsX2VuZG9yc2UgPC0gZDJfYnVja2V0cyAlPiUKICBzZWxlY3QoLWxvYWRpbmcpICU+JQogIGxlZnRfam9pbihkMl9hbGwpICU+JQogIG11dGF0ZShlbmRvcnNlID0gaWZlbHNlKHJlc3BvbnNlX251bSA+IDAsIDEsIDApKSAlPiUKICBsZWZ0X2pvaW4oZDJfYW5pbSAlPiUgZGlzdGluY3QoY2hhcmFjdGVyLCBhbmltX2luYW4pKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIHN1YmlkLCBhbmltX2luYW4sIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UobiA9IGxlbmd0aChlbmRvcnNlKSwKICAgICAgICAgICAgc3VtX2VuZG9yc2UgPSBzdW0oZW5kb3JzZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgcHJvcF9lbmRvcnNlID0gbWVhbihlbmRvcnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgojIyBTY2F0dGVyCgpMZXQncyBsb29rIGF0IHRoZSBwcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyBpbiBlYWNoIGFnZSBncm91cCB3aG9zZSBlbmRvcnNlbWVudHMgIm1hdGNoIiBhY3Jvc3MgYnVja2V0cyAtIEknbGwgY291bnQgZW5kb3JzZW1lbnQgc2NvcmVzIDwzIGFzIGxvdywgPj0zIGFzIGhpZ2gsIGFuZCAibWF0Y2hlcyIgYXMgdHdvICJsb3ciIHNjb3JlcyBvciB0d28gImhpZ2giIHNjb3Jlcy4gV2UnZCBwcmVkaWN0IHRoYXQsIGZvciBkaXN0aW5jdGlvbnMgdGhhdCBpbmNyZWFzZSBvdmVyIGRldmVsb3BtZW50LCB0aGVyZSB3b3VsZCBiZSBfZmV3ZXJfIGFkdWx0cyB0aGF0ICJtYXRjaCIgdGhhbiBjaGlsZHJlbi4KCmBgYHtyLCBpbmNsdWRlID0gVH0KZDJfYWxsX21hdGNoX3RhYiA8LSBkMl9hbGxfZW5kb3JzZSAlPiUKICBzZWxlY3QoYWdlX2dyb3VwLCBzdWJpZCwgY2hhcmFjdGVyLCBmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBzcHJlYWQoZmFjdG9yLCBzdW1fZW5kb3JzZSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoQk9EWSwgSEVBUlQsIE1JTkQpLAogICAgICAgICAgICBmdW5zKGlmZWxzZSguIDwgMywgImxlc3MgdGhhbiAzIiwgIjMgb3IgbW9yZSIpKSkgJT4lCiAgbXV0YXRlKEJPRFlfSEVBUlRfbWF0Y2ggPSAoQk9EWSA9PSBIRUFSVCksCiAgICAgICAgIEJPRFlfTUlORF9tYXRjaCA9IChCT0RZID09IE1JTkQpLAogICAgICAgICBIRUFSVF9NSU5EX21hdGNoID0gKEhFQVJUID09IE1JTkQpKSAlPiUKICBzZWxlY3QoLWMoQk9EWSwgSEVBUlQsIE1JTkQpKSAlPiUKICBnYXRoZXIocGFpciwgbWF0Y2gsIGVuZHNfd2l0aCgiX21hdGNoIikpICU+JQogIGNvdW50KGFnZV9ncm91cCwgcGFpciwgbWF0Y2gpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgcGFpcikgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGZpbHRlcihtYXRjaCA9PSBUUlVFKSAlPiUKICBzZWxlY3QoYWdlX2dyb3VwLCBwYWlyLCBwcm9wKSAlPiUKICBhcnJhbmdlKHBhaXIsIGFnZV9ncm91cCkgJT4lCiAgbXV0YXRlKHBhaXIgPSBnc3ViKCJfbWF0Y2giLCAiIiwgcGFpcikpCmQyX2FsbF9tYXRjaF90YWIKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmQyX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIHNwcmVhZChmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBCT0RZLCB5ID0gSEVBUlQsIGNvbG9yID0gYWdlX2dyb3VwKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDMsIGx0eSA9IDIpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAzLCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHdpZHRoID0gMC4yLCBoZWlnaHQgPSAwLjIpICMgKwogICMgZ2VvbV9zbW9vdGgoYWVzKGdyb3VwID0gYWdlX2dyb3VwKSwgbWV0aG9kID0gImxtIikKCmQyX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIHNwcmVhZChmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBCT0RZLCB5ID0gTUlORCwgY29sb3IgPSBhZ2VfZ3JvdXApKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMywgbHR5ID0gMikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDMsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjIsIGhlaWdodCA9IDAuMikgIyArCiAgIyBnZW9tX3Ntb290aChhZXMoZ3JvdXAgPSBhZ2VfZ3JvdXApLCBtZXRob2QgPSAibG0iKQoKZDJfYWxsX2VuZG9yc2UgJT4lCiAgc2VsZWN0KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlciwgZmFjdG9yLCBzdW1fZW5kb3JzZSkgJT4lCiAgc3ByZWFkKGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIGdncGxvdChhZXMoeCA9IEhFQVJULCB5ID0gTUlORCwgY29sb3IgPSBhZ2VfZ3JvdXApKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMywgbHR5ID0gMikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDMsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgd2lkdGggPSAwLjIsIGhlaWdodCA9IDAuMikgIyArCiAgIyBnZW9tX3Ntb290aChhZXMoZ3JvdXAgPSBhZ2VfZ3JvdXApLCBtZXRob2QgPSAibG0iKQpgYGAKCmBgYHtyfQp0ZW1wIDwtIGQyX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBhbmltX2luYW4sIGZhY3Rvciwgc3VtX2VuZG9yc2UpICU+JQogIHNwcmVhZChmYWN0b3IsIHN1bV9lbmRvcnNlKSAlPiUKICBtdXRhdGVfYXQodmFycyhCT0RZLCBIRUFSVCwgTUlORCksCiAgICAgICAgICAgIGZ1bnMoaWZlbHNlKC4gPCAzLCAibGVzcyB0aGFuIDMiLCAiMyBvciBtb3JlIikpKSAlPiUKICBtdXRhdGUoQk9EWV9IRUFSVF9tYXRjaCA9IChCT0RZID09IEhFQVJUKSwKICAgICAgICAgQk9EWV9NSU5EX21hdGNoID0gKEJPRFkgPT0gTUlORCksCiAgICAgICAgIEhFQVJUX01JTkRfbWF0Y2ggPSAoSEVBUlQgPT0gTUlORCkpICU+JQogIHNlbGVjdCgtYyhCT0RZLCBIRUFSVCwgTUlORCkpICU+JQogIGdhdGhlcihwYWlyLCBtYXRjaCwgZW5kc193aXRoKCJfbWF0Y2giKSkgJT4lCiAgbXV0YXRlKGFuaW1faW5hbiA9IGZhY3RvcihhbmltX2luYW4pLAogICAgICAgICBwYWlyID0gZmFjdG9yKHBhaXIpKSAlPiUKICBsZWZ0X2pvaW4oZDJfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpICU+JQogICAgICAgICAgICAgIGZ1bGxfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKQoKY29udHJhc3RzKHRlbXAkYWdlX2dyb3VwKSA8LSBjYmluZCgiNzlfYWQiID0gYygwLCAxLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNDZfYWQiID0gYygxLCAwLCAwKSkKY29udHJhc3RzKHRlbXAkcGFpcikgPC0gY2JpbmQoIkJIX0dNIiA9IGMoMSwgLTEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSE1fR00iID0gYygwLCAtMSwgMSkpCmNvbnRyYXN0cyh0ZW1wJGFuaW1faW5hbikgPC0gY2JpbmQoImFuaW1fR00iID0gYygtMSwgMSkpCgp0ZW1wX2FuaW0gPC0gdGVtcCAlPiUgZmlsdGVyKGFuaW1faW5hbiA9PSAiYW5pbWF0ZSIpCnRlbXBfaW5hbiA8LSB0ZW1wICU+JSBmaWx0ZXIoYW5pbV9pbmFuID09ICJpbmFuaW1hdGUiKQoKcl90ZW1wX2V4YWN0IDwtIGdsbShtYXRjaCB+IGFnZSAqIHBhaXIgKiBhbmltX2luYW4sCiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRlbXAgJT4lCiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGFnZSA9IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSksCiAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIikKCnN1bW1hcnkocl90ZW1wX2V4YWN0KQoKcl90ZW1wX2dyb3VwX2FuaW0gPC0gZ2xtKG1hdGNoIH4gYWdlX2dyb3VwICogcGFpciwKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZW1wX2FuaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSAiYmlub21pYWwiKQoKc3VtbWFyeShyX3RlbXBfZ3JvdXBfYW5pbSkKCnJfdGVtcF9ncm91cF9pbmFuIDwtIGdsbShtYXRjaCB+IGFnZV9ncm91cCAqIHBhaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGVtcF9pbmFuLAogICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gImJpbm9taWFsIikKCnN1bW1hcnkocl90ZW1wX2dyb3VwX2luYW4pCmBgYAoKYGBge3J9CnRlbXAgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhZ2VfZ3JvdXAsIGZpbGwgPSBtYXRjaCkpICsKICBmYWNldF9ncmlkKGFuaW1faW5hbiB+IHBhaXIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikKYGBgCgoKIyMgRXhhbWluZSBmaXJzdC1vcmRlciBhZ2UgdHJlbmRzCgpgYGB7cn0KZDJfYWxsX2VuZG9yc2VfYm9vdF9hbmltIDwtIGQyX2FsbF9lbmRvcnNlICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgYW5pbV9pbmFuLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInByb3BfZW5kb3JzZSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGQyX2FsbF9lbmRvcnNlLCAKICAgICAgIGFlcyh4ID0gcHJvcF9lbmRvcnNlLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKGFuaW1faW5hbiB+IGZhY3RvcikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzYsIGFscGhhID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMiwgMS4yKSwgYnJlYWtzID0gYygwLCAxLCAwLjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpCmBgYAoKYGBge3J9CmZpZ1NVUFA0YV9wbG90IDwtIGQyX2FsbF9lbmRvcnNlICU+JQogIGZpbHRlcihhZ2VfZ3JvdXAgIT0gImFkdWx0cyIpICU+JQogIGxlZnRfam9pbihkMl83OSAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkgJT4lCiAgICAgICAgICAgICAgZnVsbF9qb2luKGQyXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkpICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gcHJvcF9lbmRvcnNlLCAKICAgICAgICAgICAgIGZpbGwgPSBhbmltX2luYW4sIGNvbG9yID0gYW5pbV9pbmFuKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLjAzKSArCiAgYmlub21pYWxfc21vb3RoKGFlcyh3ZWlnaHQgPSBuKSwgc2hvdy5sZWdlbmQgPSBGLCBhbHBoYSA9IDAuMDUpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLAogICMgICAgICAgICAgICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZDJfYWxsX2VuZG9yc2UgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSAxMiksIGFscGhhID0gMC40LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQyX2FsbF9lbmRvcnNlX2Jvb3RfYW5pbSAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgIGFlcyh4ID0gMTIsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6MTAsIDEyKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDQ6MTAsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS82KSwgbGFiZWxzID0gMDo2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInNsYXRlZ3JleSIsICJmaXJlYnJpY2sxIiksIG5hLnZhbHVlID0gImdyYXkiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygic2xhdGVncmV5IiwgImZpcmVicmljazEiKSwgbmEudmFsdWUgPSAiZ3JheSIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEsIHNpemUgPSAzKSkpICsKICBsYWJzKHkgPSAibnVtYmVyIG9mIGl0ZW1zIGVuZG9yc2VkIChvdXQgb2YgNikiKQpgYGAKCmBgYHtyfQpkMl9hbGxfZW5kb3JzZV9ib290IDwtIGQyX2FsbF9lbmRvcnNlICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInByb3BfZW5kb3JzZSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpmaWdTVVBQNGJfcGxvdCA8LSBkMl9hbGxfZW5kb3JzZSAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwICE9ICJhZHVsdHMiKSAlPiUKICBsZWZ0X2pvaW4oZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpICU+JQogICAgICAgICAgICAgIGZ1bGxfam9pbihkMl80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IHByb3BfZW5kb3JzZSwgCiAgICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLCBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMC4wMykgKwogIGJpbm9taWFsX3Ntb290aChhZXMod2VpZ2h0ID0gbiksIHNob3cubGVnZW5kID0gRiwgYWxwaGEgPSAwLjA1KSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQyX2FsbF9lbmRvcnNlICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTIpLCBhbHBoYSA9IDAuNCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShkb2RnZS53aWR0aCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkMl9hbGxfZW5kb3JzZV9ib290ICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgYWVzKHggPSAxMiwgeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSA1KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoNDoxMCwgMTIpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNDoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAxLzYpLCBsYWJlbHMgPSAwOjYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJQYWlyZWQiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYWlyZWQiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxLCBzaXplID0gMykpKSArCiAgbGFicyh5ID0gIm51bWJlciBvZiBpdGVtcyBlbmRvcnNlZCAob3V0IG9mIDYpIikKYGBgCgpgYGB7cn0KZmlnU1VQUDRfcGxvdHMgPC0gcGxvdF9ncmlkKGZpZ1NVUFA0YV9wbG90LCBmaWdTVVBQNGJfcGxvdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgbGFiZWxzID0gIkFVVE8iKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVCwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuN30KZmlnU1VQUDRfd2l0aF9jYXB0aW9uIDwtIGFkZF9zdWIoZmlnU1VQUDRfcGxvdHMsIHN0cl93cmFwKCJGaWd1cmUgU1VQUDQ6IE51bWJlciBvZiBtZW50YWwgY2FwYWNpdHkgaXRlbXMgKG91dCBvZiA2KSBlbmRvcnNlZCBpbiBlYWNoIGRvbWFpbiAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EKSBieSA0LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMiwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCAyMCBtZW50YWwgY2FwYWNpdGllcyBmb3Igb25lIG9mIG5pbmUgdGFyZ2V0IGNoYXJhY3RlcnMuIFdlIGRlZmluZWQgZWFjaCBkb21haW4gYnkgdGhlIDYgaXRlbXMgdGhhdCBsb2FkZWQgdGhlIG1vc3QgcG9zaXRpdmVseSBvbiB0aGUgY29ycmVzcG9uZGluZyBmYWN0b3IgaW4gYW4gZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzIG9mIGFkdWx0cycgcmVzcG9uc2VzLCBhbmQgd2UgY29uc2lkZXJlZCByZXNwb25zZXMgb2YgZWl0aGVyICd5ZXMnIG9yICdraW5kYScgKGJ1dCBub3QgJ25vJykgdG8gYmUgZW5kb3JzZW1lbnRzLiBMaW5lcyBjb3JyZXNwb25kIHRvIGxvZ2lzdGljIHJlZ3Jlc3Npb25zIGNvbnNpZGVyaW5nIGNoaWxkcmVuJ3Mgc2NvcmVzIGFsb25lLiBFcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9uIGFkdWx0cycgc2NvcmVzLiIsIDEzMiksIHggPSAwLCBoanVzdCA9IDApCmdnZHJhdyhmaWdTVVBQNF93aXRoX2NhcHRpb24pCmBgYAoKIyMgRXhhbWluZSBkaWZmZXJlbmNlIHNjb3JlcwoKYGBge3J9CmQyX2FsbF9lbmRvcnNlX2RpZmYgPC0gZDJfYWxsX2VuZG9yc2UgJT4lCiAgc2VsZWN0KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlciwgZmFjdG9yLCBwcm9wX2VuZG9yc2UpICU+JQogIGxlZnRfam9pbihkMl9hbmltICU+JSBkaXN0aW5jdChjaGFyYWN0ZXIsIGFuaW1faW5hbikpICU+JQogIHNwcmVhZChmYWN0b3IsIHByb3BfZW5kb3JzZSkgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBzdWJpZCwgY2hhcmFjdGVyKSAlPiUKICBtdXRhdGUoYEJPRFkgbWludXMgSEVBUlRgID0gQk9EWSAtIEhFQVJULAogICAgICAgICBgQk9EWSBtaW51cyBNSU5EYCA9IEJPRFkgLSBNSU5ELAogICAgICAgICBgTUlORCBtaW51cyBIRUFSVGAgPSBNSU5EIC0gSEVBUlQpICU+JQogIHVuZ3JvdXAoKSAlPiUgCiAgc2VsZWN0KC1jKEJPRFksIEhFQVJULCBNSU5EKSkgJT4lCiAgZ2F0aGVyKGNvbXBhcmlzb24sIGRpZmZlcmVuY2UsIGNvbnRhaW5zKCJtaW4iKSkgJT4lCiAgbXV0YXRlKGRpZmZfMDEgPSAoZGlmZmVyZW5jZSArIDEpLzIsCiAgICAgICAgIGRpZmZfMDFfYWJzID0gYWJzKGRpZmZlcmVuY2UpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGQyX2FsbF9lbmRvcnNlX2RpZmYsIAogICAgICAgYWVzKHggPSBkaWZmXzAxLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKGFuaW1faW5hbiB+IGNvbXBhcmlzb24pICsKICBnZW9tX2hpc3RvZ3JhbShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGJpbndpZHRoID0gMS8xMiwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtMC4yLCAxLjIpLCBicmVha3MgPSBjKDAsIDEsIDAuNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmdncGxvdChkMl9hbGxfZW5kb3JzZV9kaWZmLCAKICAgICAgIGFlcyh4ID0gZGlmZl8wMSwgY29sb3IgPSBhZ2VfZ3JvdXAsIGZpbGwgPSBhZ2VfZ3JvdXApKSArCiAgZmFjZXRfZ3JpZCguIH4gY29tcGFyaXNvbikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzEyLCBhbHBoYSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAuNSwgbHR5ID0gMikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKC0wLjIsIDEuMiksIGJyZWFrcyA9IGMoMCwgMSwgMC41KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGRpcmVjdGlvbiA9IC0xKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIsIGRpcmVjdGlvbiA9IC0xKQpgYGAKCmBgYHtyfQpkMl9hbGxfZW5kb3JzZV9kaWZmX2Jvb3RfYW5pbSA8LSBkMl9hbGxfZW5kb3JzZV9kaWZmICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgYW5pbV9pbmFuLCBjb21wYXJpc29uKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJkaWZmXzAxIikgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmZpZ1NVUFA1YV9wbG90IDwtIGQyX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSAlPiUKICAgICAgICAgICAgICBmdWxsX2pvaW4oZDJfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoeSA9IChkaWZmZXJlbmNlICsgNikvMTIpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IGRpZmZfMDEsIAogICAgICAgICAgICAgZmlsbCA9IGFuaW1faW5hbiwgY29sb3IgPSBhbmltX2luYW4pKSArCiAgZmFjZXRfd3JhcCh+IGNvbXBhcmlzb24pICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLjAxNSkgKwogIGJpbm9taWFsX3Ntb290aChhZXMod2VpZ2h0ID0gMSksIHNob3cubGVnZW5kID0gRiwgYWxwaGEgPSAwLjA1KSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQyX2FsbF9lbmRvcnNlX2RpZmYgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSAxMiksIGFscGhhID0gMC40LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wMTUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkMl9hbGxfZW5kb3JzZV9kaWZmX2Jvb3RfYW5pbSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgIGFlcyh4ID0gMTIsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6MTAsIDEyKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDQ6MTAsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS8xMiksIGxhYmVscyA9IHNlcSgtNiwgNiwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygic2xhdGVncmV5IiwgImZpcmVicmljazEiKSwgbmEudmFsdWUgPSAiZ3JheSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJzbGF0ZWdyZXkiLCAiZmlyZWJyaWNrMSIpLCBuYS52YWx1ZSA9ICJncmF5IikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSwgc2l6ZSA9IDMpKSkgKwogIGxhYnMoeSA9ICJkaWZmZXJlbmNlcyBpbiBudW1iZXIgb2YgaXRlbXMgZW5kb3JzZWQgKG91dCBvZiA2KSIpCmBgYAoKYGBge3J9CmQyX2FsbF9lbmRvcnNlX2RpZmZfYm9vdCA8LSBkMl9hbGxfZW5kb3JzZV9kaWZmICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBjb21wYXJpc29uKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJkaWZmXzAxIikgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmZpZ1NVUFA1Yl9wbG90IDwtIGQyX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSAlPiUKICAgICAgICAgICAgICBmdWxsX2pvaW4oZDJfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoeSA9IChkaWZmZXJlbmNlICsgNikvMTIpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IGRpZmZfMDEsIAogICAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGNvbXBhcmlzb24pICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLjAxNSkgKwogIGJpbm9taWFsX3Ntb290aChhZXMod2VpZ2h0ID0gMSksIHNob3cubGVnZW5kID0gRiwgYWxwaGEgPSAwLjA1KSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQyX2FsbF9lbmRvcnNlX2RpZmYgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSAxMiksIGFscGhhID0gMC40LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wMTUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci53aWR0aCA9IDAuMjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkMl9hbGxfZW5kb3JzZV9kaWZmX2Jvb3QgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDEyLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0OjEwLCAxMiksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg0OjEwLCAieSIpLCAiYWR1bHRzIikpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDEvMTIpLCBsYWJlbHMgPSBzZXEoLTYsIDYsIDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSwgc2l6ZSA9IDMpKSkgKwogIGxhYnMoeSA9ICJkaWZmZXJlbmNlcyBpbiBudW1iZXIgb2YgaXRlbXMgZW5kb3JzZWQgKG91dCBvZiA2KSIpCmBgYAoKYGBge3J9CmZpZ1NVUFA1X3Bsb3RzIDwtIHBsb3RfZ3JpZChmaWdTVVBQNWFfcGxvdCwgZmlnU1VQUDViX3Bsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sID0gMSwgbGFiZWxzID0gIkFVVE8iKQpgYGAKCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjd9CmZpZ1NVUFA1X3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZ1NVUFA1X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIFNVUFA1OiBEaWZmZXJlbmNlcyBpbiB0aGUgbnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyAob3V0IG9mIDYpIGVuZG9yc2VkIGFjcm9zcyB0aGUgdGhyZWUgZG9tYWlucyAoQk9EWSBtaW51cyBIRUFSVCwgQk9EWSBtaW51cyBNSU5ELCBhbmQgTUlORCBtaW51cyBIRUFSVCkgYnkgNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDEsIGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMjAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiBuaW5lIHRhcmdldCBjaGFyYWN0ZXJzLiBXZSBkZWZpbmVkIGVhY2ggZG9tYWluIGJ5IHRoZSA2IGl0ZW1zIHRoYXQgbG9hZGVkIHRoZSBtb3N0IHBvc2l0aXZlbHkgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yIGluIGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyBvZiBhZHVsdHMnIHJlc3BvbnNlcywgYW5kIHdlIGNvbnNpZGVyZWQgcmVzcG9uc2VzIG9mIGVpdGhlciAneWVzJyBvciAna2luZGEnIChidXQgbm90ICdubycpIHRvIGJlIGVuZG9yc2VtZW50cy4gTGluZXMgY29ycmVzcG9uZCB0byBsb2dpc3RpYyByZWdyZXNzaW9ucyBjb25zaWRlcmluZyBjaGlsZHJlbidzIHNjb3JlcyBhbG9uZS4gRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyBvbiBhZHVsdHMnIHNjb3Jlcy4iLCAxMzIpLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnU1VQUDVfd2l0aF9jYXB0aW9uKQpgYGAKCiMjIEV4YW1pbmUgYWJzb2x1dGUgZGlmZmVyZW5jZSBzY29yZXMKCmBgYHtyfQpkMl9hbGxfZW5kb3JzZV9kaWZmX2Fic19ib290X2FuaW0gPC0gZDJfYWxsX2VuZG9yc2VfZGlmZiAlPiUKICBsZWZ0X2pvaW4oZDJfYW5pbSAlPiUgZGlzdGluY3QoY2hhcmFjdGVyLCBhbmltX2luYW4pKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGFuaW1faW5hbiwgY29tcGFyaXNvbikgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAiZGlmZl8wMV9hYnMiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmdncGxvdChkMl9hbGxfZW5kb3JzZV9kaWZmLCAKICAgICAgIGFlcyh4ID0gZGlmZl8wMV9hYnMsIGNvbG9yID0gYWdlX2dyb3VwLCBmaWxsID0gYWdlX2dyb3VwKSkgKwogIGZhY2V0X2dyaWQoYW5pbV9pbmFuIH4gY29tcGFyaXNvbikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzYsIGFscGhhID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMiwgMS4yKSwgYnJlYWtzID0gYygwLCAxLCAwLjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZDJfYWxsX2VuZG9yc2VfZGlmZiwgCiAgICAgICBhZXMoeCA9IGRpZmZfMDFfYWJzLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKC4gfiBjb21wYXJpc29uKSArCiAgZ2VvbV9oaXN0b2dyYW0ocG9zaXRpb24gPSAiaWRlbnRpdHkiLCBiaW53aWR0aCA9IDEvNiwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtMC4yLCAxLjIpLCBicmVha3MgPSBjKDAsIDEsIDAuNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkKYGBgCgpgYGB7cn0KZmlnU1VQUDZhX3Bsb3QgPC0gZDJfYWxsX2VuZG9yc2VfZGlmZiAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwICE9ICJhZHVsdHMiKSAlPiUKICBsZWZ0X2pvaW4oZDJfNzkgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpICU+JQogICAgICAgICAgICAgIGZ1bGxfam9pbihkMl80NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IGRpZmZfMDFfYWJzLCAKICAgICAgICAgICAgIGZpbGwgPSBhbmltX2luYW4sIGNvbG9yID0gYW5pbV9pbmFuKSkgKwogIGZhY2V0X3dyYXAofiBjb21wYXJpc29uKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMC4wMTUpICsKICBiaW5vbWlhbF9zbW9vdGgoYWVzKHdlaWdodCA9IDEpLCBzaG93LmxlZ2VuZCA9IEYsIGFscGhhID0gMC4wNSkgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsCiAgIyAgICAgICAgICAgICBtZXRob2QuYXJncyA9IGxpc3QoZmFtaWx5ID0gImJpbm9taWFsIikpICsKICBnZW9tX3BvaW50KGRhdGEgPSBkMl9hbGxfZW5kb3JzZV9kaWZmICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTIpLCBhbHBoYSA9IDAuNCwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXJkb2RnZShkb2RnZS53aWR0aCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMDE1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIud2lkdGggPSAwLjI1KSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZDJfYWxsX2VuZG9yc2VfZGlmZl9hYnNfYm9vdF9hbmltICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgICAgICAgYWVzKHggPSAxMiwgeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSA1KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoNDoxMCwgMTIpLCAKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYyhwYXN0ZTAoNDoxMCwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAxLzYpLCBsYWJlbHMgPSBzZXEoMCwgNiwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygic2xhdGVncmV5IiwgImZpcmVicmljazEiKSwgbmEudmFsdWUgPSAiZ3JheSIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJzbGF0ZWdyZXkiLCAiZmlyZWJyaWNrMSIpLCBuYS52YWx1ZSA9ICJncmF5IikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSwgc2l6ZSA9IDMpKSkgKwogIGxhYnMoeSA9ICJhc2JvbHV0ZSBkaWZmZXJlbmNlcyBpbiBudW1iZXIgb2YgaXRlbXMgZW5kb3JzZWQgKG91dCBvZiA2KSIpCmBgYAoKCmBgYHtyfQpkMl9hbGxfZW5kb3JzZV9kaWZmX2Fic19ib290IDwtIGQyX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBjaGFyYWN0ZXIsIGNvbXBhcmlzb24pICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImRpZmZfMDFfYWJzIikgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmZpZ1NVUFA2Yl9wbG90IDwtIGQyX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGQyXzc5ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSAlPiUKICAgICAgICAgICAgICBmdWxsX2pvaW4oZDJfNDYgJT4lIGRpc3RpbmN0KHN1YmlkLCBhZ2UpKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIHkgPSBkaWZmXzAxX2FicywgCiAgICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLCBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gY29tcGFyaXNvbikgKwogIGdlb21faml0dGVyKGFscGhhID0gMC40LCB3aWR0aCA9IDAsIGhlaWdodCA9IDAuMDE1KSArCiAgYmlub21pYWxfc21vb3RoKGFlcyh3ZWlnaHQgPSAxKSwgc2hvdy5sZWdlbmQgPSBGLCBhbHBoYSA9IDAuMDUpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJnbG0iLAogICMgICAgICAgICAgICAgbWV0aG9kLmFyZ3MgPSBsaXN0KGZhbWlseSA9ICJiaW5vbWlhbCIpKSArCiAgZ2VvbV9wb2ludChkYXRhID0gZDJfYWxsX2VuZG9yc2VfZGlmZiAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICBhZXMoeCA9IDEyKSwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2UoZG9kZ2Uud2lkdGggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQyX2FsbF9lbmRvcnNlX2RpZmZfYWJzX2Jvb3QgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDEyLCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2hvdy5sZWdlbmQgPSBGLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0OjEwLCAxMiksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg0OjEwLCAieSIpLCAiYWR1bHRzIikpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEsIDEvNiksIGxhYmVscyA9IHNlcSgwLCA2LCAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEsIHNpemUgPSAzKSkpICsKICBsYWJzKHkgPSAiYXNib2x1dGUgZGlmZmVyZW5jZXMgaW4gbnVtYmVyIG9mIGl0ZW1zIGVuZG9yc2VkIChvdXQgb2YgNikiKQpgYGAKCmBgYHtyfQpmaWdTVVBQNl9wbG90cyA8LSBwbG90X2dyaWQoZmlnU1VQUDZhX3Bsb3QsIGZpZ1NVUFA2Yl9wbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbCA9IDEsIGxhYmVscyA9ICJBVVRPIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjd9CmZpZ1NVUFA2X3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZ1NVUFA2X3Bsb3RzLCBzdHJfd3JhcCgiRmlndXJlIFNVUFA2OiBBYnNvbHV0ZSBkaWZmZXJlbmNlcyBpbiB0aGUgbnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyAob3V0IG9mIDYpIGVuZG9yc2VkIGFjcm9zcyB0aGUgdGhyZWUgZG9tYWlucyAoQk9EWSBtaW51cyBIRUFSVCwgQk9EWSBtaW51cyBNSU5ELCBhbmQgTUlORCBtaW51cyBIRUFSVCkgYnkgNC0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDIsIGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMjAgbWVudGFsIGNhcGFjaXRpZXMgZm9yIG9uZSBvZiBuaW5lIHRhcmdldCBjaGFyYWN0ZXJzLiBXZSBkZWZpbmVkIGVhY2ggZG9tYWluIGJ5IHRoZSA2IGl0ZW1zIHRoYXQgbG9hZGVkIHRoZSBtb3N0IHBvc2l0aXZlbHkgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yIGluIGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyBvZiBhZHVsdHMnIHJlc3BvbnNlcywgYW5kIHdlIGNvbnNpZGVyZWQgcmVzcG9uc2VzIG9mIGVpdGhlciAneWVzJyBvciAna2luZGEnIChidXQgbm90ICdubycpIHRvIGJlIGVuZG9yc2VtZW50cy4gTGluZXMgY29ycmVzcG9uZCB0byBsb2dpc3RpYyByZWdyZXNzaW9ucyBjb25zaWRlcmluZyBjaGlsZHJlbidzIHNjb3JlcyBhbG9uZS4gRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyBvbiBhZHVsdHMnIHNjb3Jlcy4iLCAxMzApLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnU1VQUDZfd2l0aF9jYXB0aW9uKQpgYGAKCgojIFN0dWR5IDMKCiMjIERlZmluZSBidWNrZXRzCgpgYGB7cn0KZDNfYnVja2V0cyA8LSBsb2FkaW5nc19mdW4oZWZhXzNfZDNfYWQpICU+JQogIG11dGF0ZShmYWN0b3IgPSByZWNvZGVfZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRjEiID0gIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMiIgPSAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGMyIgPSAiTUlORCIpKSAlPiUKICBncm91cF9ieShmYWN0b3IpICU+JQogIHRvcF9uKDYsIGxvYWRpbmcpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpkM19hbGxfZW5kb3JzZSA8LSBkM19idWNrZXRzICU+JQogIHNlbGVjdCgtbG9hZGluZykgJT4lCiAgbGVmdF9qb2luKGQzX2FsbCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2VfZ3JvdXApLCAhaXMubmEoY2hhcmFjdGVyKSkgJT4lCiAgbXV0YXRlKGVuZG9yc2UgPSBpZmVsc2UocmVzcG9uc2VfbnVtID4gMCwgMSwgMCkpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UobiA9IGxlbmd0aChlbmRvcnNlKSwKICAgICAgICAgICAgc3VtX2VuZG9yc2UgPSBzdW0oZW5kb3JzZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgcHJvcF9lbmRvcnNlID0gbWVhbihlbmRvcnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgojIyBFeGFtaW5lIGZpcnN0LW9yZGVyIGFnZSB0cmVuZHMKCmBgYHtyfQpkM19hbGxfZW5kb3JzZV9ib290IDwtIGQzX2FsbF9lbmRvcnNlICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInByb3BfZW5kb3JzZSIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGQzX2FsbF9lbmRvcnNlLCAKICAgICAgIGFlcyh4ID0gcHJvcF9lbmRvcnNlLCBjb2xvciA9IGFnZV9ncm91cCwgZmlsbCA9IGFnZV9ncm91cCkpICsKICBmYWNldF9ncmlkKGNoYXJhY3RlciB+IGZhY3RvcikgKwogIGdlb21faGlzdG9ncmFtKHBvc2l0aW9uID0gImlkZW50aXR5IiwgYmlud2lkdGggPSAxLzYsIGFscGhhID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMiwgMS4yKSwgYnJlYWtzID0gYygwLCAxLCAwLjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpCmBgYAoKYGBge3J9CmZpZ1NVUFA3X3Bsb3QgPC0gZDNfYWxsX2VuZG9yc2UgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGQzXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIHkgPSBwcm9wX2VuZG9yc2UsIAogICAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwgY29sb3IgPSBjaGFyYWN0ZXIsIHNoYXBlID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLjAzKSArCiAgYmlub21pYWxfc21vb3RoKGFlcyh3ZWlnaHQgPSBuKSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQzX2FsbF9lbmRvcnNlICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSwKICAgICAgICAgICAgIGFlcyh4ID0gNiksIGFscGhhID0gMC40LCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcmRvZGdlKGRvZGdlLndpZHRoID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXR0ZXIuaGVpZ2h0ID0gMC4wMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQzX2FsbF9lbmRvcnNlX2Jvb3QgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDYsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6NiksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg0OjUsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS82KSwgbGFiZWxzID0gMDo2KSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwgMjIpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxLCBzaXplID0gMykpKSArCiAgbGFicyh5ID0gIm51bWJlciBvZiBpdGVtcyBlbmRvcnNlZCAob3V0IG9mIDYpIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjd9CmZpZ1NVUFA3X3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZ1NVUFA3X3Bsb3QsIHN0cl93cmFwKCJGaWd1cmUgU1VQUDc6IE51bWJlciBvZiBtZW50YWwgY2FwYWNpdHkgaXRlbXMgKG91dCBvZiA2KSBlbmRvcnNlZCBpbiBlYWNoIGRvbWFpbiAoQk9EWSwgSEVBUlQsIGFuZCBNSU5EKSBieSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMywgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCAxOCBtZW50YWwgY2FwYWNpdGllcyBmb3IgZWFjaCBvZiB0d28gdGFyZ2V0IGNoYXJhY3RlcnM6IGEgYmVldGxlIChwaW5rIGNpcmNsZXMpIGFuZCBhIHJvYm90IChibHVlIHNxdWFyZXMpLiBXZSBkZWZpbmVkIGVhY2ggZG9tYWluIGJ5IHRoZSA2IGl0ZW1zIHRoYXQgbG9hZGVkIHRoZSBtb3N0IHBvc2l0aXZlbHkgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yIGluIGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyBvZiBhZHVsdHMnIHJlc3BvbnNlcywgYW5kIHdlIGNvbnNpZGVyZWQgcmVzcG9uc2VzIG9mIGVpdGhlciAneWVzJyBvciAna2luZGEnIChidXQgbm90ICdubycpIHRvIGJlIGVuZG9yc2VtZW50cy4gTGluZXMgY29ycmVzcG9uZCB0byBsb2dpc3RpYyByZWdyZXNzaW9ucyBjb25zaWRlcmluZyBjaGlsZHJlbidzIHNjb3JlcyBhbG9uZS4gRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyBvbiBhZHVsdHMnIHNjb3Jlcy4iLCAxMzApLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnU1VQUDdfd2l0aF9jYXB0aW9uKQpgYGAKCiMjIEV4YW1pbmUgZGlmZmVyZW5jZSBzY29yZXMKCmBgYHtyfQpkM19hbGxfZW5kb3JzZV9kaWZmIDwtIGQzX2FsbF9lbmRvcnNlICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGZhY3RvciwgcHJvcF9lbmRvcnNlKSAlPiUKICBzcHJlYWQoZmFjdG9yLCBwcm9wX2VuZG9yc2UpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgc3ViaWQsIGNoYXJhY3RlcikgJT4lCiAgbXV0YXRlKGBCT0RZIG1pbnVzIEhFQVJUYCA9IEJPRFkgLSBIRUFSVCwKICAgICAgICAgYEJPRFkgbWludXMgTUlORGAgPSBCT0RZIC0gTUlORCwKICAgICAgICAgYE1JTkQgbWludXMgSEVBUlRgID0gTUlORCAtIEhFQVJUKSAlPiUKICB1bmdyb3VwKCkgJT4lIAogIHNlbGVjdCgtYyhCT0RZLCBIRUFSVCwgTUlORCkpICU+JQogIGdhdGhlcihjb21wYXJpc29uLCBkaWZmZXJlbmNlLCBjb250YWlucygibWluIikpICU+JQogIG11dGF0ZShkaWZmXzAxID0gKGRpZmZlcmVuY2UgKyAxKS8yLAogICAgICAgICBkaWZmXzAxX2FicyA9IGFicyhkaWZmZXJlbmNlKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpLCAhaXMubmEoYWdlX2dyb3VwKSkKYGBgCgpgYGB7cn0KZDNfYWxsX2VuZG9yc2VfZGlmZl9ib290IDwtIGQzX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwLCBjaGFyYWN0ZXIsIGNvbXBhcmlzb24pICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gImRpZmZfMDEiKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CmdncGxvdChkM19hbGxfZW5kb3JzZV9kaWZmLCAKICAgICAgIGFlcyh4ID0gZGlmZl8wMSwgY29sb3IgPSBhZ2VfZ3JvdXAsIGZpbGwgPSBhZ2VfZ3JvdXApKSArCiAgZmFjZXRfZ3JpZChjaGFyYWN0ZXIgfiBjb21wYXJpc29uKSArCiAgZ2VvbV9oaXN0b2dyYW0ocG9zaXRpb24gPSAiaWRlbnRpdHkiLCBiaW53aWR0aCA9IDEvMTIsIGFscGhhID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMiwgMS4yKSwgYnJlYWtzID0gYygwLCAxLCAwLjUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIiwgZGlyZWN0aW9uID0gLTEpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZDNfYWxsX2VuZG9yc2VfZGlmZiwgCiAgICAgICBhZXMoeCA9IGRpZmZfMDEsIGNvbG9yID0gYWdlX2dyb3VwLCBmaWxsID0gYWdlX2dyb3VwKSkgKwogIGZhY2V0X2dyaWQoLiB+IGNvbXBhcmlzb24pICsKICBnZW9tX2hpc3RvZ3JhbShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGJpbndpZHRoID0gMS8xMiwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtMC4yLCAxLjIpLCBicmVha3MgPSBjKDAsIDEsIDAuNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiLCBkaXJlY3Rpb24gPSAtMSkKYGBgCgpgYGB7cn0KZmlnU1VQUDhfcGxvdCA8LSBkM19hbGxfZW5kb3JzZV9kaWZmICU+JQogIGZpbHRlcihhZ2VfZ3JvdXAgIT0gImFkdWx0cyIpICU+JQogIGxlZnRfam9pbihkM180NiAlPiUgZGlzdGluY3Qoc3ViaWQsIGFnZSkpICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKHkgPSAoZGlmZmVyZW5jZSArIDYpLzEyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhZ2UsIHkgPSBkaWZmXzAxLCAKICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gY29tcGFyaXNvbikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMikgKwogIGdlb21faml0dGVyKGFscGhhID0gMC40LCB3aWR0aCA9IDAsIGhlaWdodCA9IDAuMDE1KSArCiAgYmlub21pYWxfc21vb3RoKGFlcyh3ZWlnaHQgPSAxKSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQzX2FsbF9lbmRvcnNlX2RpZmYgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSA2KSwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2UoZG9kZ2Uud2lkdGggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQzX2FsbF9lbmRvcnNlX2RpZmZfYm9vdCAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgIGFlcyh4ID0gNiwgeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSA1KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoNDo2KSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUwKDQ6NSwgInkiKSwgImFkdWx0cyIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxLCAxLzEyKSwgbGFiZWxzID0gc2VxKC02LCA2LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSwgc2l6ZSA9IDMpKSkgKwogIGxhYnMoeSA9ICJkaWZmZXJlbmNlcyBpbiBudW1iZXIgb2YgaXRlbXMgZW5kb3JzZWQgKG91dCBvZiA2KSIpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBULCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC43fQpmaWdTVVBQOF93aXRoX2NhcHRpb24gPC0gYWRkX3N1YihmaWdTVVBQOF9wbG90LCBzdHJfd3JhcCgiRmlndXJlIFNVUFA4OiBEaWZmZXJlbmNlcyBpbiB0aGUgbnVtYmVyIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcyAob3V0IG9mIDYpIGVuZG9yc2VkIGFjcm9zcyB0aGUgdGhyZWUgZG9tYWlucyAoQk9EWSBtaW51cyBIRUFSVCwgQk9EWSBtaW51cyBNSU5ELCBhbmQgTUlORCBtaW51cyBIRUFSVCkgYnkgNC0gdG8gNS15ZWFyLW9sZCBjaGlsZHJlbiBhbmQgYWR1bHRzIGluIFN0dWR5IDMsIGluIHdoaWNoIGVhY2ggcGFydGljaXBhbnQgYXNzZXNzZWQgMTggbWVudGFsIGNhcGFjaXRpZXMgZm9yIGVhY2ggb2YgdHdvIHRhcmdldCBjaGFyYWN0ZXJzOiBhIGJlZXRsZSAocGluayBjaXJjbGVzKSBhbmQgYSByb2JvdCAoYmx1ZSBzcXVhcmVzKS4gV2UgZGVmaW5lZCBlYWNoIGRvbWFpbiBieSB0aGUgNiBpdGVtcyB0aGF0IGxvYWRlZCB0aGUgbW9zdCBwb3NpdGl2ZWx5IG9uIHRoZSBjb3JyZXNwb25kaW5nIGZhY3RvciBpbiBhbiBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMgb2YgYWR1bHRzJyByZXNwb25zZXMsIGFuZCB3ZSBjb25zaWRlcmVkIHJlc3BvbnNlcyBvZiBlaXRoZXIgJ3llcycgb3IgJ2tpbmRhJyAoYnV0IG5vdCAnbm8nKSB0byBiZSBlbmRvcnNlbWVudHMuIExpbmVzIGNvcnJlc3BvbmQgdG8gbG9naXN0aWMgcmVncmVzc2lvbnMgY29uc2lkZXJpbmcgY2hpbGRyZW4ncyBzY29yZXMgYWxvbmUuIEVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb24gYWR1bHRzJyBzY29yZXMuIiwgMTMwKSwgeCA9IDAsIGhqdXN0ID0gMCkKZ2dkcmF3KGZpZ1NVUFA4X3dpdGhfY2FwdGlvbikKYGBgCgojIyBFeGFtaW5lIGFic29sdXRlIGRpZmZlcmVuY2Ugc2NvcmVzCgpgYGB7cn0KZDNfYWxsX2VuZG9yc2VfZGlmZl9hYnNfYm9vdCA8LSBkM19hbGxfZW5kb3JzZV9kaWZmICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBjb21wYXJpc29uKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJkaWZmXzAxX2FicyIpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpmaWdTVVBQOV9wbG90IDwtIGQzX2FsbF9lbmRvcnNlX2RpZmYgJT4lCiAgZmlsdGVyKGFnZV9ncm91cCAhPSAiYWR1bHRzIikgJT4lCiAgbGVmdF9qb2luKGQzXzQ2ICU+JSBkaXN0aW5jdChzdWJpZCwgYWdlKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBtdXRhdGUoeSA9IChkaWZmZXJlbmNlICsgNikvMTIpICU+JQogIGdncGxvdChhZXMoeCA9IGFnZSwgeSA9IGRpZmZfMDFfYWJzLCAKICAgICAgICAgICAgIGZpbGwgPSBjaGFyYWN0ZXIsIGNvbG9yID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gY29tcGFyaXNvbikgKwogIGdlb21faml0dGVyKGFscGhhID0gMC40LCB3aWR0aCA9IDAsIGhlaWdodCA9IDAuMDE1KSArCiAgYmlub21pYWxfc21vb3RoKGFlcyh3ZWlnaHQgPSAxKSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAiZ2xtIiwKICAjICAgICAgICAgICAgIG1ldGhvZC5hcmdzID0gbGlzdChmYW1pbHkgPSAiYmlub21pYWwiKSkgKwogIGdlb21fcG9pbnQoZGF0YSA9IGQzX2FsbF9lbmRvcnNlX2RpZmYgJT4lIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgYWVzKHggPSA2KSwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gRiwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2UoZG9kZ2Uud2lkdGggPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdHRlci5oZWlnaHQgPSAwLjAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLndpZHRoID0gMC4yNSkpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGQzX2FsbF9lbmRvcnNlX2RpZmZfYWJzX2Jvb3QgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpLAogICAgICAgICAgICAgICAgICBhZXMoeCA9IDYsIHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaG93LmxlZ2VuZCA9IEYsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gNSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDQ6NiksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlMCg0OjUsICJ5IiksICJhZHVsdHMiKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgMS82KSwgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwgMjIpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxLCBzaXplID0gMykpKSArCiAgbGFicyh5ID0gImFzYm9sdXRlIGRpZmZlcmVuY2VzIGluIG51bWJlciBvZiBpdGVtcyBlbmRvcnNlZCAob3V0IG9mIDYpIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFQsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjd9CmZpZ1NVUFA5X3dpdGhfY2FwdGlvbiA8LSBhZGRfc3ViKGZpZ1NVUFA5X3Bsb3QsIHN0cl93cmFwKCJGaWd1cmUgU1VQUDg6IEFic29sdXRlIGRpZmZlcmVuY2VzIGluIHRoZSBudW1iZXIgb2YgbWVudGFsIGNhcGFjaXR5IGl0ZW1zIChvdXQgb2YgNikgZW5kb3JzZWQgYWNyb3NzIHRoZSB0aHJlZSBkb21haW5zIChCT0RZIG1pbnVzIEhFQVJULCBCT0RZIG1pbnVzIE1JTkQsIGFuZCBNSU5EIG1pbnVzIEhFQVJUKSBieSA0LSB0byA1LXllYXItb2xkIGNoaWxkcmVuIGFuZCBhZHVsdHMgaW4gU3R1ZHkgMywgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudCBhc3Nlc3NlZCAxOCBtZW50YWwgY2FwYWNpdGllcyBmb3IgZWFjaCBvZiB0d28gdGFyZ2V0IGNoYXJhY3RlcnM6IGEgYmVldGxlIChwaW5rIGNpcmNsZXMpIGFuZCBhIHJvYm90IChibHVlIHNxdWFyZXMpLiBXZSBkZWZpbmVkIGVhY2ggZG9tYWluIGJ5IHRoZSA2IGl0ZW1zIHRoYXQgbG9hZGVkIHRoZSBtb3N0IHBvc2l0aXZlbHkgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmFjdG9yIGluIGFuIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcyBvZiBhZHVsdHMnIHJlc3BvbnNlcywgYW5kIHdlIGNvbnNpZGVyZWQgcmVzcG9uc2VzIG9mIGVpdGhlciAneWVzJyBvciAna2luZGEnIChidXQgbm90ICdubycpIHRvIGJlIGVuZG9yc2VtZW50cy4gTGluZXMgY29ycmVzcG9uZCB0byBsb2dpc3RpYyByZWdyZXNzaW9ucyBjb25zaWRlcmluZyBjaGlsZHJlbidzIHNjb3JlcyBhbG9uZS4gRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyBvbiBhZHVsdHMnIHNjb3Jlcy4iLCAxMzApLCB4ID0gMCwgaGp1c3QgPSAwKQpnZ2RyYXcoZmlnU1VQUDlfd2l0aF9jYXB0aW9uKQpgYGAKCgo=